出处:掘金
原作者:ErpanOmer
Interaction to Next Paint (INP) 是 Google Core Web Vitals 的一部分,用来评估网页交互性能的新指标。与传统的指标(如 FID)不同,INP 不仅关注用户首次交互的响应速度,还对整个页面的交互响应性进行更全面的衡量。这一指标的提出,旨在解决用户在浏览和使用页面时体验到的交互延迟问题,从而提高整体用户体验
本文将通过理论、实践代码和优化技巧,全面解读 INP
INP 是一个反映页面在用户交互后响应时间的指标。它衡量用户点击、滚动、按键等交互事件与下一次屏幕更新(页面内容渲染)之间的延迟时间
定义:
INP 的数值是页面中所有交互事件响应延迟的 95th 百分位数,即排除掉最慢 5% 的事件
公式:
INP = Max(Interaction Delay + Next Paint Delay)
关键组成部分:
使用 Chrome DevTools 的 Lighthouse 生成性能报告,其中会包含 INP 的数值
借助 Google 提供的 Web Vitals 库,开发者可以在代码中动态测量 INP:
import { onINP } from 'web-vitals';
onINP((metric) => {
console.log('INP value:', metric.value);
});
通过 Performance 面板观察用户交互事件的响应时间。步骤:
问题:长时间运行的 JavaScript 脚本会阻塞主线程,导致 INP 延迟增加
优化:使用 setTimeout 或 Web Worker 将任务拆分
问题:复杂的 CSS 动画或 JavaScript 动画占用大量资源
优化:使用 GPU 加速的 transform 和 opacity
问题:大量同步 DOM 操作导致主线程被占用
优化:使用 DocumentFragment 批量更新 DOM
transform 和 opacitypassive 属性优化滚动事件:document.addEventListener('scroll', handleScroll, { passive: true });const worker = new Worker('worker.js');
worker.postMessage('start');
worker.onmessage = (event) => {
console.log('Worker Result:', event.data);
};
Interaction to Next Paint (INP) 是衡量网页交互响应性能的重要指标,关注整个页面的交互延迟,而不仅是首次交互。优化 INP 需要开发者从多个角度入手,包括减少主线程阻塞、优化动画和 DOM 操作,以及合理利用异步技术。通过持续监控和优化 INP,可以显著提升用户体验,为页面的整体性能加分